package ch02_data.generics.base;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @author by guodd
 * @version 1.0
 */
public class BaseNoGeneric {
    // 原始方式？考虑下优缺点
    @Test
    public void createObject() {
        BaseObject baseObject = new BaseObject();
        // 泛型可以理解是一个守门员，不加泛型就没有守门员可以随便放
        baseObject.setO("java");
        baseObject.setO(1);
        // 数据类型强转，容易出现异常，java.lang.ClassCastException
        String t = (String) baseObject.getO();
        System.out.println(t);
    }

    // 为什么使用泛型？
    // 1、如果不使用泛型有什么问题？
    // 2、可以编译期进行校验，无需类型转换
    @Test
    public void listInfo() {
        List<Integer> ls01 = new ArrayList<>();
        List<String> ls02 = new ArrayList<>();
        ls01.add(1);
        ls01.add(2);
        ls02.add("aa");

        // ls01 = ls02;

        // 编译不通过，反证法解释原因
        // ls02.add(1);

        // 泛型摩擦
        System.out.println(ls01.getClass());
        System.out.println(ls01.getClass() == ls02.getClass());
        System.out.println(ls01);
    }
}
